package com.mayfool.gitmanager.core.action;

import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

/**
 * @author zhou.xu
 * @description: 动作管理器
 * 负责管理系统中所有动作的监听器，实现了观察者模式
 * 使用ConcurrentHashMap保证线程安全
 * @date 2025/3/12 13:29
 * @since JDK 1.8
 */
public class ActionManager {

    /**
     * 存储动作类型和对应监听器的映射关系
     * 使用ConcurrentMap确保线程安全
     */
    private static final ConcurrentMap<ActionType, MyListener> listeners = new ConcurrentHashMap<>();

    /**
     * 添加动作监听器
     * @param type 动作类型
     * @param listener 对应的监听器
     */
    public static void addListener(ActionType type, MyListener listener) {
        listeners.put(type, listener);
    }

    /**
     * 触发指定的动作
     * 根据动作信息中的类型，调用对应的监听器处理
     * @param actionInfo 动作信息
     */
    public static void fire(ActionInfo actionInfo) {
        listeners.get(actionInfo.getType()).onAction(actionInfo);
    }
}
